HTMLify

script.js
Views: 41 | Author: cody
        const container = document.querySelector('.container');
        let conDim = container.getBoundingClientRect();
        const gameover = document.createElement('div');
        gameover.textContent = "Click here to Start Game And Press up Arrow Key Left/Right Arrow Key to Move";
        gameover.style.position = "absolute";
        gameover.style.color = "white";
        gameover.style.lineHeight = "60px";
        gameover.style.height = "250px";
        gameover.style.textAlign = "center";
        gameover.style.fontSize = "3em";
        gameover.style.textTransform = "uppercase";
        gameover.style.backgroundColor = "green";
        gameover.style.width = "100%";
        gameover.addEventListener('click', startGame);
        container.appendChild(gameover);
        const ball = document.createElement('div');
        ball.style.position = "absolute";
        ball.style.width = "20px";
        ball.style.height = "20px";
        ball.style.backgroundColor = "white";
        ball.style.borderRadius = "25px";
        ball.style.backgroundImage = "url('ball.png')";
        ball.style.backgroundSize = "20px 20px";
        ball.style.top = "70%";
        ball.style.left = "50%";
        ball.style.display = "none";
        container.appendChild(ball);
        const paddle = document.createElement('div');
        paddle.style.position = "absolute";
        paddle.style.backgroundColor = "white";
        paddle.style.height = "20px";
        paddle.style.width = "100px";
        paddle.style.borderRadius = "25px";
        paddle.style.bottom = "30px";
        paddle.style.left = "50%";
        container.appendChild(paddle);
        document.addEventListener('keydown', function (e) {
            //console.log(e.keyCode);
            if (e.keyCode === 37) paddle.left = true;
            if (e.keyCode === 39) paddle.right = true;
            if (e.keyCode === 38 && !player.inPlay) player.inPlay = true;
        })
        document.addEventListener('keyup', function (e) {
            //console.log(e.keyCode);
            if (e.keyCode === 37) paddle.left = false;
            if (e.keyCode === 39) paddle.right = false;
        })
        const player = {
            gameover: true
        };

        function startGame() {
            if (player.gameover) {
                player.gameover = false;
                gameover.style.display = "none";
                player.score = 0;
                player.lives = 1;
                player.inPlay = false;
                ball.style.display = "block";
                ball.style.left = paddle.offsetLeft + 50 + "px";
                ball.style.top = paddle.offsetTop - 30 + "px";
                player.ballDir = [2, -5];
                player.num = 80;
                setupBricks(player.num);
                scoreUpdater();
                player.ani = window.requestAnimationFrame(update);
            }
        }

        function setupBricks(num) {
            let row = {
                x: ((conDim.width % 100) / 2)
                , y: 50
            }
            let skip = false;
            for (let x = 0; x < num; x++) {
                //console.log(row);
                if (row.x > (conDim.width - 100)) {
                    row.y += 50;
                    if (row.y > (conDim.height / 2)) {
                        skip = true;
                    }
                    row.x = ((conDim.width % 100) / 2);
                }
                row.count = x;
                if (!skip) {
                    createBrick(row);
                }
                row.x += 100;
            }
        }

        function createBrick(pos) {
            const div = document.createElement('div');
            div.setAttribute('class', 'brick');
            div.style.backgroundColor = rColor();
            div.textContent = pos.count + 1;
            div.style.left = pos.x + 'px';
            div.style.top = pos.y + 'px';
            container.appendChild(div);
        }

        function isCollide(a, b) {
            let aRect = a.getBoundingClientRect();
            let bRect = b.getBoundingClientRect();
            return !((aRect.right < bRect.left) || (aRect.left > bRect.right) || (aRect.bottom < bRect.top) || (aRect.top > bRect.bottom));
        }

        function rColor() {
            return '#' + Math.random().toString(16).substr(-6);
        }

        function scoreUpdater() {
            document.querySelector('.score').textContent = player.score;
            document.querySelector('.lives').textContent = player.lives;
        }

        function update() {
            if (!player.gameover) {
                let pCurrent = paddle.offsetLeft;
                if (paddle.left && pCurrent > 0) {
                    pCurrent -= 5;
                }
                if (paddle.right && (pCurrent < (conDim.width - paddle.offsetWidth))) {
                    pCurrent += 5;
                }
                paddle.style.left = pCurrent + 'px';
                if (!player.inPlay) {
                    waitingOnPaddle();
                }
                else {
                    moveBall();
                }
                player.ani = window.requestAnimationFrame(update);
            }
        }

        function waitingOnPaddle() {
            ball.style.top = (paddle.offsetTop - 22) + 'px';
            ball.style.left = (paddle.offsetLeft + 40) + 'px';
        }

        function fallOff() {
            player.lives--;
            if (player.lives < 0) {
                endGame();
                player.lives = 0;
            }
            scoreUpdater();
            stopper();
        }

        function endGame() {
            gameover.style.display = "block";
            gameover.innerHTML = "Game Over<br>Your score " + player.score;
            player.gameover = true;
            ball.style.display = "none";
            let tempBricks = document.querySelectorAll('.brick');
            for (let tBrick of tempBricks) {
                tBrick.parentNode.removeChild(tBrick);
            }
            window.cancelAnimationFrame(player.ani);
        }

        function stopper() {
            player.inPlay = false;
            player.ballDir[0, -5];
            waitingOnPaddle();
            window.cancelAnimationFrame(player.ani);
        }

        function moveBall() {
            let posBall = {
                x: ball.offsetLeft
                , y: ball.offsetTop
            }
            if (posBall.y > (conDim.height - 20) || posBall.y < 0) {
                if (posBall.y > (conDim.height - 20)) {
                    fallOff();
                }
                else {
                    player.ballDir[1] *= -1;
                }
            }
            if (posBall.x > (conDim.width - 20) || posBall.x < 0) {
                player.ballDir[0] *= -1;
            }
            if (isCollide(paddle, ball)) {
                let temp = ((posBall.x - paddle.offsetLeft) - (paddle.offsetWidth / 2)) / 10;
                console.log('hit');
                player.ballDir[0] = temp;
                player.ballDir[1] *= -1;
            };
            let bricks = document.querySelectorAll('.brick');
            if (bricks.length == 0 && !player.gameover) {
                stopper();
                setupBricks(player.num);
            }
            for (let tBrick of bricks) {
                if (isCollide(tBrick, ball)) {
                    player.ballDir[1] *= -1;
                    tBrick.parentNode.removeChild(tBrick);
                    player.score++;
                    scoreUpdater();
                }
            }
            posBall.y += player.ballDir[1];
            posBall.x += player.ballDir[0];
            ball.style.top = posBall.y + 'px';
            ball.style.left = posBall.x + 'px';
        }
 

Comments